# Python 模块

# 模块是 Python 中用于组织代码的一种方式。模块可以被导入到其他模块中，也可以被直接运行。

# 模块的定义
# 模块可以定义在一个文件中，也可以定义在多个文件中。模块的定义使用关键字 `def` 来定义函数，使用关键字 `class` 来定义类。

# 模块的导入
# 模块的导入使用关键字 `import` 来导入模块。导入的模块可以用点号 `.` 来访问模块中的函数和类。


# Python 标准模块库
# Python 标准模块库包含了许多常用的模块，可以直接使用。常用的标准模块有：
# - math 模块: 用于数学运算(平方根、三角函数等)
# - cmath 模块: 用于复数运算
# - decimal 模块: 用于精确的浮点运算
# - sys 模块：用于获取 Python 解释器相关信息
# - os 模块：用于文件和目录的操作
# - random 模块：用于生成随机数
# - datetime 模块：用于日期和时间的处理
# - json 模块：用于处理 JSON 数据
# - re 模块：用于处理正则表达式
# - csv 模块：用于处理 CSV 文件
# - logging 模块：用于记录程序的日志
# - unittest 模块：用于编写和运行单元测试
# - subprocess 模块：用于创建子进程
# - threading 模块：用于创建线程
# - multiprocessing 模块：用于创建进程
# - queue 模块：用于管理队列
# - heapq 模块：用于管理堆
# - bisect 模块：用于二分查找
# - itertools 模块：用于创建迭代器
# - functools 模块：用于高阶函数
# - operator 模块：用于操作符重载
# - collections 模块：用于高级容器数据类型
# - urllib.request 模块：用于处理 URL 请求
# - xml.etree.ElementTree 模块：用于处理 XML 数据
# - tkinter 模块：用于创建图形用户界面


# 模块的搜索路径
# 当导入模块时，Python会按照以下顺序搜索模块的路径：
# 1. 当前目录
# 2. 由 `PYTHONPATH` 环境变量指定的目录
# 3. 系统路径, 即 Python标准库的安装目录 sys.path
# 4. .pth 文件中指定的目录（Windows 系统）
# 如果导入时找不到对应的模块，则会引发ModuleNotFoundError异常。


# 示例代码
# 导入 sys 模块并打印当前 Python 版本号。
import sys
print("版本号:", sys.version)
print("平台:", sys.platform)
print("路径:", sys.path)      # 包含了一个 Python 解释器自动查找所需模块的路径的列表
for i in sys.argv:           # 打印命令行参数
    print("参数:", i)


# 导入自定义模块
import module_support
# 调用模块中的函数
module_support.fuck("you")


# from ... import ...
# Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中
# 导入模块中的函数到当前命名空间
from module_support import fuck
fuck("you")

# 导入模块中的变量
from module_support import age
print("模块中的变量 age:", age)

# 导入模块中的多个变量
from module_support import (age, name)
print(f"模块中的变量 age:{age}, name:{name}")

# 导入模块中的所有函数、变量、类到当前命名空间
from module_support import *
# 调用模块中的函数
mack("王大锤")
# 访问模块中的变量
print("模块中的变量 age:", module_support.age)
# 使用模块中的类
p = Person("风清影竹", age)    # 可以省略模块名
p.say_hello()


# dir() 函数
# dir() 函数可以查看模块中的所有属性和方法，包括模块中的函数、变量、类等。返回值是一个包含字符串的列表。
print("模块中所有的属性和方法:", dir(module_support))
